package com.jt.factory;

import org.springframework.beans.factory.FactoryBean;
import org.springframework.stereotype.Component;
import java.util.Calendar;

/**
 * FactoryBean是Spring提供的接口，spring自动完成调用，获取指定的对象
 * 难点讲解：
 *       1.@Component  表示类  则将该类交给Spring容器管理
 *       2.Spring中FactoryBean的讲解  如果spring加载的时候遇到
 *       FactoryBean接口，则会自动的执行重写的方法getObject/getObjectType
 * 工厂模式说明：
 *      Map<key:Calendar,value=Calendar对象></>
 * 核心功能:
 *       1. key: 就是当前类型(如果自己编辑注解以注解为准)
 *       2. value: 调用getObject获取的返回值对象
 *       将上述的数据,交给Spring容器管理
 * 该功能什么时候使用:
 *       1. 某些对象不能直接实例化的.
 *       2. 整合其它第三方框架对象时 经常使用.

 */
@Component("calendar")
public class CalendarFactory implements FactoryBean<Calendar> {

    public CalendarFactory(){
        System.out.println("调用了构造方法");
    }

    //现阶段  理解为主，未来写架构的时候会用到
    //动态的执行该方法，获取返回值对象
    @Override
    public Calendar getObject() throws Exception {
        //return null;
        //利用calendar的工具API，实现对象的创建
        return Calendar.getInstance();
    }

    @Override
    public Class<?> getObjectType() {
        //固定写法，一般直接xxx.class即可
        return null;
    }
}
